在SwiftUI中,使用 URLSession
和 Codable
來處理網路請求並獲取資料是很常見的做法。這裡我將為你展示如何使用這些技術來從網路 API 獲取資料並將其顯示在SwiftUI的畫面中。
假設我們有一個 API,返回一些用戶的資料,格式如下:
[
{
"id": 1,
"name": "John Doe",
"email": "john@example.com"
},
{
"id": 2,
"name": "Jane Smith",
"email": "jane@example.com"
}
]
我們將使用 URLSession
來進行網路請求,並使用 Codable
協定來解析返回的 JSON 資料。
首先,定義與 JSON 對應的資料模型,並讓它遵守 Codable
協定:
struct User: Codable, Identifiable {
let id: Int
let name: String
let email: String
}
接著,我們建立一個網路管理類別,負責發送網路請求並解析返回的資料:
class NetworkManager: ObservableObject {
@Published var users: [User] = []
func fetchUsers() {
guard let url = URL(string: "https://example.com/api/users") else { return }
let task = URLSession.shared.dataTask(with: url) { data, response, error in
if let data = data {
do {
let decodedUsers = try JSONDecoder().decode([User].self, from: data)
DispatchQueue.main.async {
self.users = decodedUsers
}
} catch {
print("Error decoding data: \(error)")
}
} else if let error = error {
print("Error fetching data: \(error)")
}
}
task.resume()
}
}
最後,我們在 SwiftUI 視圖中使用這個網路管理類別來顯示資料:
struct ContentView: View {
@StateObject private var networkManager = NetworkManager()
var body: some View {
NavigationView {
List(networkManager.users) { user in
VStack(alignment: .leading) {
Text(user.name)
.font(.headline)
Text(user.email)
.font(.subheadline)
.foregroundColor(.gray)
}
}
.navigationTitle("Users")
.onAppear {
networkManager.fetchUsers()
}
}
}
}
User
模型: 使用 Codable
來解析 JSON 資料。NetworkManager
類別: 使用 URLSession
來進行網路請求並解析資料。使用 @Published
來讓 SwiftUI 在資料改變時更新視圖。ContentView
: 使用 @StateObject
來持有 NetworkManager
的實例,並在 onAppear
方法中調用 fetchUsers()
來載入資料。這個範例展示了如何使用 URLSession
和 Codable
來從 API 獲取資料並在 SwiftUI 應用中顯示。你可以依照這個範例來處理各種網路請求和資料解析。